/**
题目:
    数字 n 代表生成括号的对数，请你设计一个函数，用于能够生成所有可能的并且 有效的 括号组合。
    示例：
    输入：n = 3
    输出：[
        "((()))",
        "(()())",
        "(())()",
        "()(())",
        "()()()"
        ]
    来源：力扣（LeetCode）
    链接：https://leetcode-cn.com/problems/generate-parentheses
    著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
思路:
    递归
*/
func generateParenthesis(n int) []string {
    if n == 1{
        return []string{"()"}
    }
    ps := generateParenthesis(n-1)
    fmt.Println(ps)
    res := make([]string,0)
    for _, s := range ps{
        res = append(res, "()" + s)
        for i, ss := range s{
            if ss == '('{
                res = append(res, "(" + s[:i+1] + ")" + s[i+1:])
            }else{
                break
            }
        }
    }
    return res
}